On-chip traffic prioritization in memory

ABSTRACT

According to one embodiment, a method for traffic prioritization in a memory device includes sending a memory access request including a priority value from a processing element in the memory device to a crossbar interconnect in the memory device. The memory access request is routed through the crossbar interconnect to a memory controller in the memory device associated with the memory access request. The memory access request is received at the memory controller. The priority value of the memory access request is compared to priority values of a plurality of memory access requests stored in a queue of the memory controller to determine a highest priority memory access request. A next memory access request is performed by the memory controller based on the highest priority memory access request.

CROSS-REFERENCE TO RELATED APPLICATIONS

This is a continuation application of U.S. patent application Ser. No.13/737,339, filed Jan. 9, 2013, the contents of which are incorporatedby reference herein in their entirety.

BACKGROUND

The present invention relates to computer memory, and more particularlyto traffic prioritization within a memory device.

Computer systems often require a considerable amount of high speedmemory, such as random access memory (RAM), to hold information, such asdata and programs, when a computer is powered and operational. Memorydevice demands have continued to grow as computer systems have increasedin performance and complexity.

Communication from a main processor to locations on memory devices caninvolve relatively long data access times and latency. The time it takesfor the main processor to access memory can be, for example, severalhundred cycles, including time to realize the data is not in cache (formemory reads), time to traverse from a processor core of the mainprocessor to I/O, across a module or other packaging, arbitration timeto establish a channel to memory in a multi-processor/shared memorysystem, and time to get the data into or out of a memory cell.Contention between multiple resources attempting to access shared memoryat the same time adds to system latency and power requirements.

SUMMARY

According to one embodiment, a method for traffic prioritization in amemory device includes sending a memory access request including apriority value from a processing element in the memory device to acrossbar interconnect in the memory device. The memory access request isrouted through the crossbar interconnect to a memory controller in thememory device associated with the memory access request. The memoryaccess request is received at the memory controller. The priority valueof the memory access request is compared to priority values of aplurality of memory access requests stored in a queue of the memorycontroller to determine a highest priority memory access request. A nextmemory access request is performed by the memory controller based on thehighest priority memory access request.

Additional exemplary embodiments include a method for trafficprioritization in a memory system. The method includes sending a memoryaccess request, including a priority value, from a processing element tothe crossbar interconnect in a memory device. The memory access requestis routed through the crossbar interconnect to a memory controller inthe memory device associated with the memory access request. The memoryaccess request is received at the memory controller to access memory ina vault of stacked memory chips controlled by the memory controller. Thepriority value of the memory access request is compared to priorityvalues of a plurality of memory access requests stored in a queue of thememory controller to determine a highest priority memory access request.The plurality of memory access requests are from the processing elementand one or more other processing elements. A next memory access requestis performed based on the highest priority memory access request.

Additional features and advantages are realized through the techniquesof the present invention. Other embodiments and aspects of the inventionare described in detail herein and are considered a part of the claimedinvention. For a better understanding of the invention with theadvantages and the features, refer to the description and to thedrawings.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

The subject matter which is regarded as the invention is particularlypointed out and distinctly claimed in the claims at the conclusion ofthe specification. The forgoing and other features, and advantages ofthe invention are apparent from the following detailed description takenin conjunction with the accompanying drawings in which:

FIG. 1 illustrates a block diagram of a computer system in accordancewith an embodiment;

FIG. 2 illustrates a block diagram of a memory device in accordance withan embodiment;

FIG. 3 illustrates a block diagram of a memory device in accordance withan alternate embodiment; and

FIG. 4 illustrates a flow diagram of a method for traffic prioritizationin a memory device in accordance with an embodiment.

DETAILED DESCRIPTION

An embodiment is directed to a computer system with a main processor andone or more active memory devices having on-chip traffic prioritization.Power and latency in memory are important factors affecting systemperformance and energy. In exemplary embodiments, prioritization ofmemory traffic reduces bandwidth contention and power to improve systemperformance. Each active memory device can include an on-chip network ofcrossbar interconnect switches to connect a number of links from a mainprocessor, multiple processing elements, and multiple memorycontrollers. A number of features can be utilized to enhance memorytraffic prioritization. The traffic prioritization can be managed in adistributed fashion by locally setting priority at the source of eachmemory access request through hardware or software indications ofcriticality and progress, or in a centralized fashion through an on-chipprogress monitor to globally control progress. Traffic prioritizationmanagement can be implemented in the processing elements, in thecrossbar interconnect, and/or in the memory controllers.

In embodiments, the processing elements are capable of performing avariety of tasks, such as arithmetic operations, loads, stores anddecrements. Each processing element can perform a sequence ofinstructions loaded into a lane instruction buffer to offload the mainprocessor in performing operations upon data accessed in the activememory devices. Multiple processing elements can access memory withineach memory device.

In an embodiment, each active memory device includes layers of memorythat form a three dimensional (“3D”) memory device where individualcolumns of memory chips form stacks or vaults in communication with amemory controller. In one embodiment, a plurality of memory vaults islocated on an active memory device, where each vault has a respectivememory controller. The stacks may also include a processing elementconfigured to communicate with the memory and other processing elementsin the active memory device. In other embodiments, processing elementsare physically separated from the memory stacks but are still part ofthe active memory device, where the processing elements are pooled andavailable to perform instructions using any of the memory stacks withinthe device. In an embodiment, a processing element accesses a selectedaddress in a vault through a crossbar interconnect of switches and amemory controller. In one embodiment, a plurality of memory devices,stacks and processing elements may communicate via an interconnectnetwork formed by coupling multiple crossbar interconnects. Inembodiments, a memory stack includes multiple dynamic random accessmemory (DRAM) dies stacked together, where each DRAM die is divided intoa number of banks. Further, in the example, a group of banks in eachdie, vertically aligned, may be referred to as a vault accessed by avault controller or memory controller.

Embodiments include a plurality of memory vaults with memory controllersand processing elements, referred to as an active memory device. Theactive memory device can perform a complex set of operations usingmultiple locations (e.g., data stored at specific addresses) within thememory device as operands. A process is provided whereby instructionsand operations are performed autonomously on these operands within thememory device. Instructions and operations may be stored within thememory device itself and are not dispatched from a main processor,wherein the stored instructions are provided to the processing elementsfor processing by the processing element in the memory device. In oneembodiment, the processing elements are programmable engines, comprisinga lane instruction buffer, an instruction unit, including branchingcapability and instruction decode, a mixture of vector, scalar, and maskregister files, a plurality of load/store units for the movement of databetween memory and the register files, and a plurality of executionunits for the arithmetic and logical processing of various data types.Also included in the processing element are address translationcapabilities for converting or translating virtual addresses to physicaladdresses, a unified load/store queue to sequence data movement betweenthe memory and the processing element, and a processor communicationsunit, for communication with the main processor.

FIG. 1 illustrates a block diagram of a computer system including one ormore active memory devices having on-chip traffic prioritization inaccordance with an embodiment. A computer system 100 depicted in FIG. 1includes a computer processor 102, a memory 106, an interconnect network104 including a crossbar interconnect of switches, a memory controller105, and processing element 108.

In one embodiment, the memory 106 and memory controller 105 are coupledto the computer processor 102 via the interconnect network 104.Processes executing on the computer processor 102 can issue memoryaccess requests through the interconnect network 104 or provideinstructions to the processing element 108 that result in memory accessrequests. In one example, a write request contains data to be written tothe memory 106 and the real address identifying the location in thememory 106 where the data will be written.

In an embodiment, a command sent from the computer processor 102 throughthe interconnect network 104 to the processing element 108 specifies asequence of instructions that include setup actions, execution actionsand notification of completion actions. The setup actions may includeconfiguration actions such as a command that loads configurationinformation from the memory 106 directly into the processing element108. By providing the configuration information in the memory 106, theprocessing element 108 is able to be properly configured after receivinga command. In an embodiment, configuration information may includeinformation used to translate between virtual addresses and realaddresses in the memory. Further, configuration information may includeinformation to maintain coherence, by ensuring accuracy and consistency,of memory mapping and translation between the processing element and arequestor (e.g., main processor). The setup actions may also include theloading of code, such as a sequence of instructions, from the memory 106into the processing element 108. The execution actions include executionof the code that includes load, store, arithmetic/logical and otherinstructions.

In an additional mode of an embodiment, the processing element 108 iscoupled to the main processor or computer processor 102 through theinterconnect network 104 and receives a command from the computerprocessor 102. The command corresponds to instructions stored in thememory to access and perform operations on the memory 106. In theembodiment, the instruction(s) executes and forms the virtual addresscorresponding to a location in memory 106. The memory controller 105and/or processing element 108 stores data at a real address within thememory 106. In an embodiment, the processing element 108 maps thevirtual address to a real address in the memory 106 when storing orretrieving data. The computer processor 102 provides commands to thememory 106, where the processing element 108 receives the command andfetches corresponding instructions from the memory 106. In anembodiment, the processing element 108 receives a task as part of thecommand, where a part of the task may be sent back to the computerprocessor 102 for execution. The computer processor 102 may be bettersuited to execute functions specified by the task due to severalfactors, such as data location and support for the functions. In anembodiment, the memory 106, memory controller 105, the interconnectnetwork 104, and processing element 108 are combined into a singledevice, such as an active memory device, in communication with the mainprocessor 102.

The system 100 is one example of a configuration that may be utilized toperform the processing described herein. Although the system 100 hasbeen depicted with only a single memory 106, memory controller 105,interconnect network 104, processing element 108, and computer processor102, it will be understood that other embodiments would also operate inother systems with two or more of the memory 106, memory controller 105,processing element 108 or computer processor 102. In an embodiment, thememory 106, memory controller 105, interconnect network 104, processingelement 108, and computer processor 102 are not located within the samecomputer. For example, the memory 106, processing element 108 and memorycontroller 105 may be located in one physical location (e.g., on amemory module) while the computer processor 102 is located in anotherphysical location (e.g., the computer processor 102 accesses the memorycontroller 105 via the interconnect network 104 or other network). Inaddition, portions of the processing described herein may span one ormore of the memory 106, memory controller 105, interconnect network 104,processing element 108, and computer processor 102.

The memory 106 may store one or more separate programs, each of whichcomprises an ordered listing of executable instructions for implementinglogical functions. For example, software stored in the memory 106 mayinclude an operating system (not shown), source code 112, and one ormore applications. As shown in FIG. 1, the memory 106 stores source code112 and a compiler 110. The compiler 110 may alternatively be stored andexecuted on a system that is external to the system 100 for which itproduces executable programs, such as executable 114. The compiler 110includes numerous functional components for implementing one or morefeatures, processes, methods, functions, and operations of the exemplaryembodiments, as will be described further herein. In an embodiment, thecompiler 110 compiles and links the source code 112 into the executable114 to be executed within the processing element 108. To improve trafficprioritization, the compiler 110 can be configured to determineload-to-use distances between loading and using data associated withmemory access requests from the processing element 108 when generatingthe executable 114 for the processing element 108. The compiler 110 canset a load-to-use distance hint in executable instructions of theexecutable 114 for the processing element 108. Slack identified based onthe load-to-use distance can result in formatting a memory accessrequest as a lower power non-speculative request using a request-grantprotocol for a larger load-to-use distance or a higher power speculativerequest for a smaller load-to-use distance.

FIG. 2 is a block diagram of a memory device 200 according to anembodiment. In one embodiment, the memory device 200 is an active memorydevice that includes a processing elements 202A and 202B (referred togenerally as processing element or elements 202) coupled to a crossbarinterconnect 204. The memory device 200 also includes memory controllers206A and 206B (referred to generally as memory controller or controllers206) coupled to the crossbar interconnect 204, and to memory vaults 208Aand 208B (referred to generally as memory vault or vaults 208)respectively. The memory device 200 can also include one or moreadditional processing elements 202N coupled to the crossbar interconnect204. One or more additional elements 210 can also be coupled to thecrossbar interconnect 204, such as additional sets of memory controllers206, memory vaults 208, and a main processor such as computer processor102 of FIG. 1. The memory vaults 208A and 208B can each include multiplelayers of stacked addressable memory elements arranged inthree-dimensional blocked regions that are independently accessible inparallel.

The crossbar interconnect 204 provides a fast and high bandwidth pathfor communication between portions of the memory device 200 using anetwork of switches (not depicted). The crossbar interconnect 204includes an arbiter 212 that is configured to receive memory accessrequests. The memory access requests can each include a routing tag andpriority value. The arbiter 212 arbitrates between memory accessrequests based on comparing priority values of the memory accessrequests relative to each other. The arbiter 212 can support arequest-grant protocol for non-speculative requests, where the arbiter212 receives a scheduling request and responds with a scheduling slotindicating when a requesting resource (e.g., a processing element 202)will be granted access to pass communications through the crossbarinterconnect 204. The arbiter 212 can also support a speculative requestprotocol. If a speculative request is received at the arbiter 212 and apath through the crossbar interconnect 204 is available, the speculativerequest can be granted immediately; otherwise, the speculative requestmay be denied. Requests that are denied by the arbiter 212 may be queuedlocally to retry or the requesting resource may be responsible forresending the request.

Memory access requests that are successfully routed through the crossbarinterconnect 204 are collected in queues 214 of the memory controllers206. Each memory controller 206 may have a separate queue 214 to storememory access requests for its respective vault 208. For example, memorycontroller 206A includes queue 214A to buffer memory access requests tovault 208A of stacked memory chips controlled by memory controller 206A,and memory controller 206B includes queue 214B to buffer memory accessrequests to vault 208B of stacked memory chips controlled by memorycontroller 206B.

Each processing element 202 includes features to support trafficprioritization. For example, processing element 202A includes a laneinstruction buffer 216A, a progress counter 218A, a load-store queue220A, and a memory request priority register 222A. Similarly, processingelement 202B includes a lane instruction buffer 216B, a progress counter218B, a load-store queue 220B, and a memory request priority register222B. The lane instruction buffers 216A and 216B include a sequence ofinstructions for each of the processing elements 202A and 202B toexecute, such as portions of the executable 114 of FIG. 1.

Each of the processing elements 202A and 202B may advance throughinstructions at a different rate. As execution checkpoints are reachedor a predetermined number of instructions are executed, each of theprocessing elements 202A and 202B can update their respective progresscounters 218A and 218B. Changes in the progress counters 218A and 218Bcan result in changes in the memory request priority registers 222A and222B. For example, a lower progress indication in progress counters 218Aand 218B can result in a higher priority value in the memory requestpriority registers 222A and 222B, while a higher progress indication inthe progress counters 218A and 218B can result in a lower priority valuein the memory request priority registers 222A and 222B to givepreference to a processing element 202 that is slower in advancingthrough the instructions.

The memory request priority registers 222A and 222B can be adjustedbased on a load-store queue depth relative to a load-store queuecapacity of load-store queues 220A and 220B, where the load-store queues220A and 220B buffer a sequence of memory access requests and data sentbetween the processing elements 202 and the memory controllers 206. Thememory request priority registers 222A and 222B may also be adjustedbased on application code or compiler hints indicating criticality of acode section or load-to-use distance of memory access requests ininstructions in the instruction buffers 216A and 216B.

While FIG. 2 depicts only two processing elements 202A and 202B, memorycontrollers 206A and 206 B, and memory vaults 208A and 208B in thememory device 200, the number of elements in the memory device 200 canvary. In one example, the number of processing elements 202 may begreater than the number of memory vaults 208. In another embodiment, thememory device 200 may include fewer processing elements 202 than memoryvaults 208. In embodiments, the processing elements 202 are pooled andavailable to access any memory vault 208 in the memory device 200. Forexample, the memory device 200 may include sixteen memory vaults 208 andmemory controllers 206, but only eight processing elements 202. Theeight processing elements 202 are pooled, and utilized as resources foraccessing any memory vaults 208 coupled to the crossbar interconnect204. In another example, a memory device may be passive, where thememory device is controlled by external requestors, like computerprocessor 102 of FIG. 1, coupled to the crossbar interconnect 204.

FIG. 3 illustrates a block diagram of a memory device 300 in accordancewith an alternate embodiment. Like the memory device 200 of FIG. 2, thememory device 300 of FIG. 3 is an active memory device that includesprocessing elements 202A, and 202B, one or more additional processingelements 202N, crossbar interconnect 204, memory controllers 206A and206B coupled to memory vaults 208A and 208B, one or more additionalelements 210, arbiter 212, queues 214A and 214B, lane instructionbuffers 216A and 216B, progress counters 218A and 218B, load-storequeues 220A and 220B, and memory request priority registers 222A and222B. Additionally, the memory device 300 also includes a progressmonitor 302 for global traffic prioritization.

The progress monitor 302 receives progress counter values of theprogress counters 218A and 218B, as well as progress counter values fromany other progress counters 218 in the memory device 300. The progressmonitor 302 compares the progress counter values and adjusts the memoryrequest priority registers 222A and 222B, as well as any other memoryrequest priority registers 222 in the memory device 300 to increasepriority for processing elements 202 having lesser progress and decreasepriority for processing elements 202 having greater progress. Adjustingthe memory request priority registers 222 globally can result inreducing power for tasks that are running ahead and provide lowerlatency for tasks that are falling behind to balance overall progresswithin the memory device 300.

FIG. 4 is a flow chart 400 of an exemplary process for memory trafficprioritization, such as in the system 100 and memory devices 200 and 300of FIGS. 1-3. At block 402, a memory access request, including apriority value, is sent from a processing element 202 to a crossbarinterconnect 204 in a memory device, such as memory device 200 or 300.The priority value is set based on a memory request priority register222 in the processing element 202.

At block 404, the memory access request is routed through the crossbarinterconnect 204 to a memory controller 206 in the memory deviceassociated with the memory access request. The memory access request andone or more other memory access requests can be received at the crossbarinterconnect 204. The arbiter 212 arbitrates between the memory accessrequest and the one or more other memory access requests in the crossbarinterconnect 204 based on comparing the priority value of the memoryaccess request relative to one or more priority values of the one ormore other memory access requests.

At block 406, the memory access request is received at the memorycontroller 206 to access memory in a vault 208 of stacked memory chipscontrolled by the memory controller 206. At block 408, the memorycontroller 206 compares the priority value of the memory access requestto priority values of a plurality of memory access requests stored in aqueue 214 of the memory controller 206 to determine a highest prioritymemory access request, where the plurality of memory access requests arefrom the processing element 202 and one or more other processingelements.

At block 410, the memory controller 206 performs a next memory accessrequest based on the highest priority memory access request. The memorycontroller 206 may adjust the priority of memory access requests in thequeue 214. For example, the memory controller 206 may receive anindication that the load-store queue 220 has reached a threshold levelof the load-store queue depth relative to the load-store queue capacityand increase priority values of memory access requests in the queue 214from the processing element 202 based on the indication. The memorycontroller 206 may also adjust the priority values of the plurality ofmemory access requests stored in the queue 214 based on one or more of:a number of memory access requests in the queue 214 from a sameprocessing element 202; a latest priority of a last arriving memoryaccess request from the same processing element 202; and an age of thememory access requests in the queue 214.

The memory request priority register 222 can be adjusted based on avariety of factors to dynamically modify priority for memory accessrequests. For example, the memory request priority register 222 can beadjusted based on an application code hint indicating criticality of acode section. The memory request priority register 222 can also beadjusted based on a load-to-use distance hint from the compiler 110,where a larger load-to-use distance is associated with a lower priorityand a smaller load-to-use distance is associated with a higher priority.The memory access request may be handled as a non-speculative requestbased on a lower priority value and as a speculative request based on ahigher priority value. The memory request priority register 222 can alsobe adjusted based on a load-store queue depth relative to a load-storequeue capacity of a load-store queue 220 in the processing element 202.The memory request priority register 222 may also be adjusted based onthe value of the progress counter 218, where the progress counter 218 isupdated based on a relative number of instructions executed in theprocessing element 202. Adjustments to the memory request priorityregister 222 based on the progress counter 218 can be managed locally bythe processing element 202 or globally by the progress monitor 302.

Technical effects include reduced latency and power while balancingcomputation in processing elements of a memory device accessing sharedmemory vaults through memory controllers and a crossbar interconnect.

The terminology used herein is for the purpose of describing particularembodiments only and is not intended to be limiting of the invention. Asused herein, the singular forms “a”, “an” and “the” are intended toinclude the plural forms as well, unless the context clearly indicatesotherwise. It will be further understood that the terms “comprises”and/or “comprising,” when used in this specification, specify thepresence of stated features, integers, steps, operations, elements,and/or components, but do not preclude the presence or addition of onemore other features, integers, steps, operations, element components,and/or groups thereof.

The corresponding structures, materials, acts, and equivalents of allmeans or step plus function elements in the claims below are intended toinclude any structure, material, or act for performing the function incombination with other claimed elements as specifically claimed. Thedescription of the present invention has been presented for purposes ofillustration and description, but is not intended to be exhaustive orlimited to the invention in the form disclosed. Many modifications andvariations will be apparent to those of ordinary skill in the artwithout departing from the scope and spirit of the invention. Theembodiment was chosen and described in order to best explain theprinciples of the invention and the practical application, and to enableothers of ordinary skill in the art to understand the invention forvarious embodiments with various modifications as are suited to theparticular use contemplated.

Further, as will be appreciated by one skilled in the art, aspects ofthe present disclosure may be embodied as a system, method, or computerprogram product. Accordingly, aspects of the present disclosure may takethe form of an entirely hardware embodiment, an entirely softwareembodiment (including firmware, resident software, micro-code, etc.) oran embodiment combining software and hardware aspects that may allgenerally be referred to herein as a “circuit,” “module” or “system.”Furthermore, aspects of the present disclosure may take the form of acomputer program product embodied in one or more computer readablemedium(s) having computer readable program code embodied thereon.

Any combination of one or more computer readable medium(s) may beutilized. The computer readable medium may be a computer readable signalmedium or a computer readable storage medium. A computer readablestorage medium may be, for example, but not limited to, an electronic,magnetic, optical, electromagnetic, infrared, or semiconductor system,apparatus, or device, or any suitable combination of the foregoing. Morespecific examples (a non-exhaustive list) of the computer readablestorage medium would include the following: an electrical connectionhaving one or more wires, a portable computer diskette, a hard disk, arandom access memory (RAM), a read-only memory (ROM), an erasableprogrammable read-only memory (EPROM or Flash memory), an optical fiber,a portable compact disc read-only memory (CD-ROM), an optical storagedevice, a magnetic storage device, or any suitable combination of theforegoing. In the context of this document, a computer readable storagemedium may be any tangible medium that can contain, or store a programfor use by or in connection with an instruction execution system,apparatus, or device.

A computer readable signal medium may include a propagated data signalwith computer readable program code embodied therein, for example, inbaseband or as part of a carrier wave. Such a propagated signal may takeany of a variety of forms, including, but not limited to,electro-magnetic, optical, or any suitable combination thereof. Acomputer readable signal medium may be any computer readable medium thatis not a computer readable storage medium and that can communicate,propagate, or transport a program for use by or in connection with aninstruction execution system, apparatus, or device.

Program code embodied on a computer readable medium may be transmittedusing any appropriate medium, including but not limited to wireless,wireline, optical fiber cable, RF, etc., or any suitable combination ofthe foregoing.

Computer program code for carrying out operations for aspects of thepresent disclosure may be written in any combination of one or moreprogramming languages, including an object oriented programming languagesuch as Java, Smalltalk, C++ or the like and conventional proceduralprogramming languages, such as the “C” programming language or similarprogramming languages. The program code may execute entirely on theuser's computer, partly on the user's computer, as a stand-alonesoftware package, partly on the user's computer and partly on a remotecomputer or entirely on the remote computer or server. In the latterscenario, the remote computer may be connected to the user's computerthrough any type of network, including a local area network (LAN) or awide area network (WAN), or the connection may be made to an externalcomputer (for example, through the Internet using an Internet ServiceProvider).

Aspects of the present disclosure are described above with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems) and computer program products according to embodiments of thedisclosure. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer program instructions. These computer program instructions maybe provided to a processor of a general purpose computer, specialpurpose computer, or other programmable data processing apparatus toproduce a machine, such that the instructions, which execute via theprocessor of the computer or other programmable data processingapparatus, create means for implementing the functions/acts specified inthe flowchart and/or block diagram block or blocks.

These computer program instructions may also be stored in a computerreadable medium that can direct a computer, other programmable dataprocessing apparatus, or other devices to function in a particularmanner, such that the instructions stored in the computer readablemedium produce an article of manufacture including instructions whichimplement the function/act specified in the flowchart and/or blockdiagram block or blocks.

The computer program instructions may also be loaded onto a computer,other programmable data processing apparatus, or other devices to causea series of operational steps to be performed on the computer, otherprogrammable apparatus or other devices to produce a computerimplemented process such that the instructions which execute on thecomputer or other programmable apparatus provide processes forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods, and computer program products according to variousembodiments of the present disclosure. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof code, which comprises one or more executable instructions forimplementing the specified logical function(s). It should also be notedthat, in some alternative implementations, the functions noted in theblock may occur out of the order noted in the figures. For example, twoblocks shown in succession may, in fact, be executed substantiallyconcurrently, or the blocks may sometimes be executed in the reverseorder, depending upon the functionality involved. It will also be notedthat each block of the block diagrams and/or flowchart illustration, andcombinations of blocks in the block diagrams and/or flowchartillustration, can be implemented by special purpose hardware-basedsystems that perform the specified functions or acts, or combinations ofspecial purpose hardware and computer instructions.

What is claimed is:
 1. A method for traffic prioritization in a memorydevice, the method comprising: sending a first memory access requestcomprising a first priority value from a processing element in thememory device to a crossbar interconnect in the memory device; routingthe first memory access request through the crossbar interconnect to amemory controller in the memory device associated with the first memoryaccess request; receiving the first memory access request at the memorycontroller; determining a first load-to-use distance associated with thefirst memory access request, wherein the first load-to-use distance isindicative of a first time that elapses between loading and using dataassociated with the first memory access request; determining a secondload-to-use distance associated with a second memory access request of aplurality of memory access requests stored in a queue of the memorycontroller, wherein the second load-to-use distance is indicative of asecond time that elapses between loading and using data associated withthe second memory access request, wherein each of the plurality ofmemory access requests stored in the queue is associated with acorresponding priority value of a set of priority values, and whereinthe set of priority values is indicative of an order of execution of theplurality of memory access requests; determining that the secondload-to-use distance is greater than the first load-to-use distanceindicating that the second time is greater than the first time;dynamically modifying a second priority value of the second memoryaccess request based at least in part on determining that the secondload-to-use distance is greater than the first load-to-use distance,wherein dynamically modifying the second priority value compriseslowering the second priority value to decrease a priority of the secondmemory access request in the order of execution; comparing the firstpriority value of the first memory access request to the set of priorityvalues to determine a highest priority memory access request; andperforming, by the memory controller, the highest priority memory accessrequest.
 2. The method of claim 1, further comprising: setting the firstpriority value based on a memory request priority register in theprocessing element.
 3. The method of claim 2, further comprising:adjusting the memory request priority register based on an applicationcode hint indicating criticality of a code section.
 4. The method ofclaim 2, further comprising: adjusting the memory request priorityregister based on a load-to-use distance hint from a compiler, whereinadjusting the memory request priority register comprises increasing ordecreasing the first priority value based at least in part on the firstload-to-use distance; and handling the first memory access request as anon-speculative request based on decreasing the first priority value orhandling the first memory access request as a speculative request basedon increasing the first priority value.
 5. The method of claim 2,further comprising: adjusting the memory request priority register basedon a depth of a load-store queue associated with the processing elementrelative to a capacity of the load-store queue.
 6. The method of claim5, wherein the processing element is a first processing element and theload-store queue is a first load-store queue, and wherein the secondmemory access request is received from a second processing elementassociated with a second load-store queue, the method furthercomprising: receiving at the memory controller an indication that thesecond load-store queue has reached a threshold level of depth relativeto a capacity of the second load-store queue; and increasing priorityvalues of memory access requests in the queue of the memory controllerfrom the second processing element based on the indication.
 7. Themethod of claim 2, further comprising: updating a progress counter inthe processing element based on a relative number of instructionsexecuted in the processing element; and adjusting the memory requestpriority register based on the progress counter.
 8. The method of claim7, further comprising: receiving a progress counter value of theprogress counter at a progress monitor; comparing the progress countervalue to one or more other progress counter values received from one ormore other processing elements; and adjusting the memory requestpriority register of the processing element and one or more other memoryrequest priority registers of the one or more other processing elementsto increase priority for processing elements having lesser progress anddecrease priority for processing elements having greater progress. 9.The method of claim 1, further comprising: receiving the memory accessrequest and one or more other memory access requests at the crossbarinterconnect; and arbitrating between the memory access request and theone or more other memory access requests in the crossbar interconnectbased on comparing the priority value of the memory access requestrelative to one or more priority values of the one or more other memoryaccess requests.
 10. The method of claim 1, further comprising:adjusting the priority values of the plurality of memory access requestsstored in the queue of the memory controller based on one or more of: anumber of memory access requests in the queue from a same processingelement; a latest priority of a last arriving memory access request fromthe same processing element; and an age of the memory access requests inthe queue.
 11. A memory device, comprising: a processing element coupledto a crossbar interconnect, the processing element configured to send afirst memory access request comprising a first priority value to thecrossbar interconnect; the crossbar interconnect configured to route thefirst memory access request to a memory controller associated with thefirst memory access request; and the memory controller coupled to amemory and to the crossbar interconnect, the memory controllercomprising a queue storing a plurality of memory access requests andconfigured to: determine a first load-to-use distance between loadingand using data associated with the first memory access request, whereinthe first load-to-use distance is indicative of a first time thatelapses between loading and using data associated with the first memoryaccess request; determine a second load-to-use distance between loadingand using data associated with a second memory access request of aplurality of memory access requests stored in a queue of the memorycontroller, wherein the second load-to-use distance is indicative of asecond time that elapses between loading and using data associated withthe second memory access request, wherein each of the plurality ofmemory access requests stored in the queue is associated with acorresponding priority value of a set of priority values, and whereinthe set of priority values is indicative of an order of execution of theplurality of memory access requests; determine that the secondload-to-use distance is greater than the first load-to-use distanceindicating that the second time is greater than the first time;dynamically modify a second priority value of the second memory requestbased at least in part on determining that the second load-to-usedistance is greater than the first load-to-use distance, whereindynamically modifying the second priority value comprises lowering thesecond priority value to decrease a priority of the second memory accessrequest in the order of execution; compare the first priority value ofthe memory access request to the set of priority values to determine ahighest priority memory access request; and perform the highest prioritymemory access request.
 12. The memory device of claim 11, wherein theprocessing element further comprises a memory request priority register,and the processing element is further configured to set the firstpriority value based on the memory request priority register in theprocessing element.
 13. The memory device of claim 12, wherein thememory request priority register is adjusted based on an applicationcode hint indicating criticality of a code section.
 14. The memorydevice of claim 12, wherein the processing element is further configuredto: adjust the memory request priority register based on a load-to-usedistance hint from a compiler, wherein adjusting the memory requestpriority register comprises increasing or decreasing the first priorityvalue based at least in part on the first load-to-use distance indicatedby the load-to-use distance hint; and handle the first memory accessrequest as a non-speculative request based on decreasing the firstpriority value or handle the first memory access request as aspeculative request based on decreasing the first priority value. 15.The memory device of claim 12, wherein the processing element is furtherconfigured to adjust the memory request priority register based on adepth of a load-store queue associated with the processing elementrelative to a capacity of the load-store queue.
 16. The memory device ofclaim 15, wherein the processing element is a first processing elementand the load-store queue is a first load-store queue, wherein the secondmemory access request is received from a second processing elementassociated with a second load-store queue, and wherein the memorycontroller is further configured to: receive an indication that thesecond load-store queue has reached a threshold level of depth relativeto a capacity of the second load-store queue; and increase priorityvalues of memory access requests in the queue of the memory controllerfrom the second processing element based on the indication.
 17. Thememory device of claim 12, wherein the processing element furthercomprises the progress counter and the processing element is furtherconfigured to: update a progress counter in the processing element basedon a relative number of instructions executed in the processing element;and adjust the memory request priority register based on the progresscounter.
 18. The memory device of claim 17, further comprising: one ormore other processing elements comprising one or more other memoryrequest priority registers and one or more other progress counters; anda progress monitor coupled to the processing element and the one or moreother processing elements, the progress monitor configured to: receive aprogress counter value of the progress counter and one or more otherprogress counter values from the one or more other progress counters;compare the progress counter value to the one or more other progresscounter values; and adjust the memory request priority register of theprocessing element and the one or more other memory request priorityregisters of the one or more other processing elements to increasepriority for processing elements having lesser progress and decreasepriority for processing elements having greater progress.
 19. The memorydevice of claim 11, wherein the crossbar interconnect further comprisesan arbiter, the arbiter configured to: receive the memory access requestand one or more other memory access requests; and arbitrate between thememory access request and the one or more other memory access requestsbased on comparing the priority value of the memory access requestrelative to one or more priority values of the one or more other memoryaccess requests.
 20. The memory device of claim 11, wherein the memorycontroller is further configured to adjust the priority values of theplurality of memory access requests stored in the queue of the memorycontroller based on one or more of: a number of memory access requestsin the queue from a same processing element; a latest priority of a lastarriving memory access request from the same processing element; and anage of the memory access requests in the queue.